// src/utils/mockData.js

/**
 * 生成虚拟数据
 * @param {number} count - 生成的数据条数
 * @returns {Array} 虚拟数据数组
 */
export function generateMockData(count = 100) {
	const mockData = []
	const titles = [
		'如何使用Vue3构建高效应用',
		'React与Vue的对比分析',
		'前端开发的最佳实践',
		'JavaScript高级技巧',
		'CSS布局完全指南',
		'TypeScript入门到精通',
		'Node.js后端开发实战',
		'Web性能优化策略',
		'移动端适配解决方案',
		'前端工程化实践'
	]

	const descriptions = [
		'本文详细介绍了如何利用Vue3的新特性构建高效应用',
		'全面比较React和Vue框架的优缺点及适用场景',
		'分享前端开发中的最佳实践和常见陷阱',
		'深入探讨JavaScript的高级用法和技巧',
		'完整解析CSS各种布局方式及应用场景',
		'从基础到高级，系统学习TypeScript',
		'基于Node.js的后端开发实战经验分享',
		'20个提升Web应用性能的有效策略',
		'一站式解决移动端适配的各种问题',
		'现代前端工程化的完整实践方案'
	]

	const authors = [
		'张小明',
		'李华',
		'王技术',
		'赵开发者',
		'钱前端',
		'孙架构师',
		'周设计师',
		'吴全栈',
		'郑工程师',
		'冯专家'
	]

	const domains = ['example.com', 'test.com', 'demo.com', 'sample.com', 'mock.com']

	for (let i = 1; i <= count; i++) {
		const titleIndex = i % titles.length
		const descIndex = i % descriptions.length
		const authorIndex = i % authors.length
		const domainIndex = i % domains.length

		mockData.push({
			id: i,
			title: `${titles[titleIndex]} ${i}`,
			desc: `${descriptions[descIndex]} - 第${i}版`,
			src: `https://${domains[domainIndex]}/articles/${i}`,
			avatar: `https://randomuser.me/api/portraits/${i % 2 === 0 ? 'men' : 'women'}/${i % 10}.jpg`,
			auth: authors[authorIndex],
			like: Math.floor(Math.random() * 1000),
			createdAt: new Date(Date.now() - Math.random() * 1e10).toISOString()
		})
	}

	return mockData
}

/**
 * 模拟分页查询
 * @param {Array} data - 完整数据集
 * @param {number} page - 当前页码
 * @param {number} pageSize - 每页条数
 * @param {Object} filters - 过滤条件
 * @returns {Object} 分页结果
 */
export function paginateData(data, page = 1, pageSize = 10, filters = {}) {
	// 应用过滤条件
	let filteredData = [...data]

	if (filters.title) {
		filteredData = filteredData.filter(item =>
			item.title.includes(filters.title))
	}

	if (filters.auth) {
		filteredData = filteredData.filter(item =>
			item.auth.includes(filters.auth))
	}

	if (filters.minLike !== undefined) {
		filteredData = filteredData.filter(item =>
			item.like >= filters.minLike)
	}

	// 计算分页
	const total = filteredData.length
	const start = (page - 1) * pageSize
	const end = start + pageSize
	const paginatedData = filteredData.slice(start, end)

	return {
		records: paginatedData,
		total,
		current: page,
		pageSize,
		totalPages: Math.ceil(total / pageSize)
	}
}

/**
 * 模拟API请求延迟
 * @param {Function} fn - 要执行的函数
 * @param {number} delay - 延迟时间(ms)
 * @returns {Promise}
 */
export function mockApiRequest(fn, delay = 300) {
	return new Promise((resolve) => {
		setTimeout(() => {
			resolve(fn())
		}, delay)
	})
}